<?php

class SimpleImage {
 
   var $image;
   var $image_type;
 
   function getSize(){
       return $this->image->getSize();
   }
   
   function load($filename) {
 
      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {
 
         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {
 
         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {
 
         $this->image = imagecreatefrompng($filename);
      }
   }
   function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
 
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image,$filename,$compression);
      } elseif( $image_type == IMAGETYPE_GIF ) {
 
         imagegif($this->image,$filename);
      } elseif( $image_type == IMAGETYPE_PNG ) {
 
         imagepng($this->image,$filename);
      }
      if( $permissions != null) {
 
         chmod($filename,$permissions);
      }
   }
   function output($image_type=IMAGETYPE_JPEG) {
 
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image);
      } elseif( $image_type == IMAGETYPE_GIF ) {
 
         imagegif($this->image);
      } elseif( $image_type == IMAGETYPE_PNG ) {
 
         imagepng($this->image);
      }
   }
   function getWidth() {
 
      return imagesx($this->image);
   }
   function getHeight() {
 
      return imagesy($this->image);
   }
   function resizeToHeight($height) {
 
      $ratio = $height / $this->getHeight();
      $width = $this->getWidth() * $ratio;
      $this->resize($width,$height);
   }
 
   function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }
 
   function scale($scale) {
      $width = $this->getWidth() * $scale/100;
      $height = $this->getheight() * $scale/100;
      $this->resize($width,$height);
   }
 
   function resize($width,$height) {
      $new_image = imagecreatetruecolor($width, $height);
      imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
      $this->image = $new_image;
   }      
 
}



class UsersController extends AppController{
    // 
    public $uses = array('User', 'Group', 'Image');
    public $layout = 'home';


    public function beforeFilter(){
        parent::beforeFilter();
        $this->Auth->allow('inscription');
    }
    
    public function home(){
        
        $this->redirect(array('action' => 'settings'));
        $this->set('user', $this->getCurrentUser());
        
        
    }
    
    public function inscription() { 
        $this->layout = 'default';      
        if (!empty($this->request->data)){
            $data = $this->request->data; 
            $this->User->set($data);
            $this->User->save($data);   
            $this->Session->setFlash('Votre compte à été créé. Vous allez recevoir un email de confirmation');
            $this->redirect(array('action' => 'home'));
        }       
        
    }
   
    public function login() {        
        $this->layout = 'default';      
        if ($this->request->is('post')) {            
            if ($this->Auth->login()) {                
                return $this->redirect($this->Auth->redirect());
            } else {
                $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'Auth');
            }
            
        }
    }
    
    public function logout(){
        $this->redirect($this->Auth->logout());
    }    
    
    public function settings(){
        
        $user =  $this->getCurrentUser();
        
        if (!empty($this->request->data['User'])){
            $data = $this->request->data['User'];
            
            if($data['File']['name']){ 
                $infoFile = $this->generateThumb($data['File']['tmp_name'], $data['File']['name'], 100, 100);           
                $filename = $infoFile['filename'];
                $dir =  $infoFile['dir'];
                
                $imgData = array(
                    'filename' => $filename,
                    'filesize' => 100, 
                    'mimetype' => 100,
                    'dir' => $dir
                );
                $image = $this->Image->save($imgData);
                
                $oldImage = $user['Image'];
                if ($oldImage['id'] != null){
                    if (is_file($oldImage['dir'].$oldImage['filename']))
                        unlink($oldImage['dir'].$oldImage['filename']);
                    $this->Image->delete($oldImage['id']);
                }
                    
                if (!empty($image)){
                    $imageId = $image['Image']['id'];
                    $data = array(
                        'User' => array(
                            'id' => $this->getCurrentUserId(),
                            'images_id' => $imageId
                        )
                    );
                    $this->User->save($data, false);
                }
                else{
                    unlink($dir.$filename);
                    $this->Session->setFlash('Erreur, l\'image n\'a pu être téléchargé');
                }
            } 
        }
        
        $this->set('user', $user);
        
        
        
    }
    
    public function generateThumb($filename, $newname,  $height = 100, $width = 100){
        $img = new SimpleImage();
        $img->load($filename);
        $img->resize( $width,$height);
        
        $newname = uniqid().$newname;
        $newname = 'upload' . DS . 'avatars' . DS . $newname;
        $dir = APP . 'webroot' . DS;
        $img->save($dir.$newname);
        
        return array('dir' => $dir, 'filename' => $newname);
    }
    
    public function changePassword(){
        $user = $this->getCurrentUser();
        $oldPassword = $user['User']['password'];
        if (!empty($this->request->data['User'])){
            $data = $this->request->data['User'];
            if (!empty($data['new_password'])){
                if ( AuthComponent::password($data['old_password']) == $oldPassword){
                    if ($data['new_password'] == $data['new_password_confirm'] ){
                        $newData = array(
                            'User' => array(
                                'id' => $this->getCurrentUserId(),
                                'password' => $data['new_password']
                            )
                        );
                        $this->User->save($newData, false);
                       $this->Session->setFlash('Le mot de passe à été modifié !') ;
                        $this->redirect(array('controller' => 'users', 'action' => 'settings'));
                    }
                    else{
                       $this->Session->setFlash('Le mot de passe de confirmation est différent !') ;
                    }
                }
                else{
                    $this->Session->setFlash('Mot de passe incorrect !') ;                
                }
            }
        }
    }
    
    public function view($id){
        $user = $this->User->getUser('first', array(
            'conditions' => array(
                'User.id' => $id
            )
        ));
        
        
        if (!empty($user['UserGroup'])){
            $data = $this->Group->find('first', array(
                'conditions' => array(
                    'Group.id' => $user['UserGroup']['groups_id']
                ),
                'recursive' => -1
            ));
            $user['UserGroup']['Group'] = $data['Group'];
        }
        
        $this->set('user', $user);
    }
    
}



        /*
        // Récupérer l'utilisateur connecté
        $this->getCurrentUser();
        // Récupérer son id
        $this->getCurrentUserId();
        
        // contien t
        // variable les données envoyée par un formulaire
        $this->request->data;
        
        
        // sauvegarder les données (on passe un tableau de donnée)
        $this->NomDuModel->save(array(
            'NomModel' => array(
                'champ1' => 'valeur',
                'champ2' => 'valeur ..'
            )
        ));
        // si le champ id et défini, l'enregistrement sera mis a jour, sinon il sera inséré
        
        // Récupéré des données :
        $this->NomDuModel->find('all', array(
            // Les conditions des requète en DB
            'conditions' => array(
                // EN SQL : NomModel.nom_champ = 'valeur'
                'NomModel.nom_champ' => 'valeur',                
                // EN SQL : NomModel.nom_champ LIKE '%valeur'
                'NomModel.nom_champ LIKE ' => '%valeur',
                // EN SQL : NomModel.nom_champ != '%valeur'
                'NomModel.nom_champ != ' => 'valeur',
                // ... 
            ),
            // Si on veut séléctionner que certain champ
            'fields' => array(
                'NomModel.nom_champ'
            ), 
            // Si on veut récupérer que 12 enregistrement
            'limit' => 12,
            // Si on veut récupérer a partir du 3eme enregistrement
            'offset' => 3, 
            
            // Si 2 : Récupère les enregistrements et toute les tables associées et les $belongsTo des tables associé au table associé...
            // Si 1 : Récupère les enregistrements et toute les tables associées
            // Si 0 : Récupère les enregistrement de NomModel et seulement les tables associées $belongsTo
            // Si -1 : Récupère les enregistrement de NomModel sans aucune table associé
            'recursive' => 1 // Par défaut : 1 
            
        ));
        
        
        // Envoyer des donnée à la vue
        $this->set('nomDeLaVariableDansLaVue', $contenu);
        
        
        // afficher n'importequel variable 
        debug($variable);
        */
?>

